package libcpp

//设置编译阶段和链接阶段的相关参数
/*
C 头文件检索目录可以是相对目录，但是库文件检索目录则需要绝对路径。
在库文件的检索目录中可以通过 ${SRCDIR} 变量表示当前包目录的绝对路径：

-D 部分定义了宏 PNG_DEBUG，值为 1
-I 定义了头文件包含的检索目录
LDFLAGS 部分-L 指定了链接时库文件检索目录
	-l 指定了链接时需要链接 png 库。

//在库文件的检索目录中可以通过 ${SRCDIR} 变量表示当前包目录的绝对路径
// #cgo LDFLAGS: -L${SRCDIR}/libs -lfoo
*/

// #cgo CFLAGS: -DPNG_DEBUG=1 -I./include
// #cgo LDFLAGS: -L/usr/local/lib
/*

 #include <stdio.h>
 static const char* cs = "hello";
*/
import "C"

//不同平台使用不同C代码

/*
#cgo windows CFLAGS: -DCGO_OS_WINDOWS=1
#cgo darwin CFLAGS: -DCGO_OS_DARWIN=1
#cgo linux CFLAGS: -DCGO_OS_LINUX=1

#if defined(CGO_OS_WINDOWS)
    const char* os = "windows";
#elif defined(CGO_OS_DARWIN)
    const char* os = "darwin";
#elif defined(CGO_OS_LINUX)
    const char* os = "linux";
#else
#	error(unknown os)
#endif
*/
import "C"
import "github.com/gookit/color"

// 不同 Go 包中引入的虚拟的 C 包的类型却是不同的（main_test.go.C != cgo_helper.C）

type CChar C.char

func (p *CChar) GoString() string {
	return C.GoString((*C.char)(p))
}

// 外部不能直接获取该类型

func PrintCString(cs *C.char) {
	C.puts(cs)
}

func PrintCStaticString() {
	//color.Redln(C.cs)
}
func PrintCOS() {
	color.Yellowln("c.os:", C.GoString(C.os))
}
